home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / Windows / Interfaces / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-03  |  11.0 KB  |  398 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DPick.h                                                 **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     Public picking routines                                  **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1992-1994 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DPick_h
  15. #define QD3DPick_h
  16.  
  17. #if PRAGMA_ONCE
  18.     #pragma once
  19. #endif
  20.  
  21. #include "QD3DStyle.h"
  22. #include "QD3DGeometry.h"
  23.  
  24. #if defined(THINK_C) || defined(__SC__)
  25.     #pragma options(!pack_enums, !align_arrays)
  26.     #pragma SC options align=power
  27. #elif defined(__MWERKS__)
  28.     #pragma enumsalwaysint on
  29.     #pragma align_array_members off
  30.     #pragma options align=native
  31. #elif defined(__PPCC__)
  32.     #pragma options align=power
  33. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  34.     #pragma options enum=int
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif  /*  __cplusplus  */
  40.  
  41.  
  42. /*****************************************************************************
  43.  **                                                                            **
  44.  **                            Mask bits for hit information                     **
  45.  **                                                                            **
  46.  *****************************************************************************/
  47.  
  48. typedef enum TQ3PickDetailMasks {
  49.     kQ3PickDetailNone                    = 0,
  50.     kQ3PickDetailMaskPickID             = 1 << 0,
  51.     kQ3PickDetailMaskPath                 = 1 << 1,
  52.     kQ3PickDetailMaskObject             = 1 << 2,
  53.     kQ3PickDetailMaskLocalToWorldMatrix    = 1 << 3,
  54.     kQ3PickDetailMaskXYZ                 = 1 << 4,
  55.     kQ3PickDetailMaskDistance             = 1 << 5,
  56.     kQ3PickDetailMaskNormal             = 1 << 6,
  57.     kQ3PickDetailMaskShapePart             = 1 << 7,
  58.     kQ3PickDetailMaskUV                 = 1 << 8
  59. #if defined(ESCHER_VER_15) && (ESCHER_VER_15)
  60.     ,kQ3PickDetailMaskPickPart             = 1 << 9,
  61.     kQ3PickDetailMaskNeighborhood        = 1 << 10
  62. #endif  /*  ESCHER_VER_15  */
  63. } TQ3PickDetailMasks;
  64.  
  65. typedef unsigned long TQ3PickDetail;
  66.  
  67.  
  68. /******************************************************************************
  69.  **                                                                             **
  70.  **                                Hitlist sorting                                 **
  71.  **                                                                             **
  72.  *****************************************************************************/
  73.  
  74. typedef enum TQ3PickSort {
  75.     kQ3PickSortNone,
  76.     kQ3PickSortNearToFar,
  77.     kQ3PickSortFarToNear
  78. } TQ3PickSort;
  79.  
  80.  
  81. /******************************************************************************
  82.  **                                                                             **
  83.  **                    Data structures to set up the pick object                 **
  84.  **                                                                             **
  85.  *****************************************************************************/
  86.  
  87. #define kQ3ReturnAllHits        0
  88.  
  89. typedef struct TQ3PickData {
  90.     TQ3PickSort            sort;
  91.     TQ3PickDetail        mask;
  92.     unsigned long        numHitsToReturn;
  93. } TQ3PickData;
  94.  
  95. typedef struct TQ3WindowPointPickData {
  96.     TQ3PickData            data;
  97.     TQ3Point2D            point;
  98.     float                vertexTolerance;
  99.     float                edgeTolerance;
  100. } TQ3WindowPointPickData;
  101.  
  102. typedef struct TQ3WindowRectPickData {
  103.     TQ3PickData            data;
  104.     TQ3Area                rect;
  105. } TQ3WindowRectPickData;
  106.  
  107.  
  108. /******************************************************************************
  109.  **                                                                             **
  110.  **                                    Hit data                                 **
  111.  **                                                                             **
  112.  *****************************************************************************/
  113.  
  114. typedef struct TQ3HitPath {
  115.     TQ3GroupObject            rootGroup;
  116.     unsigned long             depth;
  117.     TQ3GroupPosition        *positions;
  118. } TQ3HitPath;
  119.  
  120. /* OBSOLETE */
  121. typedef struct TQ3HitData {
  122.     TQ3PickParts            part;
  123.     TQ3PickDetail            validMask;
  124.     unsigned long             pickID;
  125.     TQ3HitPath                path;
  126.     TQ3Object                object;
  127.     TQ3Matrix4x4            localToWorldMatrix;
  128.     TQ3Point3D                xyzPoint;
  129.     float                    distance;
  130.     TQ3Vector3D                normal;
  131.     TQ3ShapePartObject        shapePart;
  132. } TQ3HitData;
  133.  
  134.  
  135. /******************************************************************************
  136.  **                                                                             **
  137.  **                                Pick class methods                             **
  138.  **                                                                             **
  139.  *****************************************************************************/
  140.  
  141. QD3D_EXPORT TQ3ObjectType Q3Pick_GetType(
  142.     TQ3PickObject        pick);
  143.  
  144. QD3D_EXPORT TQ3Status Q3Pick_GetData(
  145.     TQ3PickObject        pick,
  146.     TQ3PickData            *data);
  147.  
  148. QD3D_EXPORT TQ3Status Q3Pick_SetData(
  149.     TQ3PickObject        pick,
  150.     const TQ3PickData    *data);
  151.     
  152. QD3D_EXPORT TQ3Status Q3Pick_GetVertexTolerance(
  153.     TQ3PickObject        pick,
  154.     float                *vertexTolerance);
  155.     
  156. QD3D_EXPORT TQ3Status Q3Pick_GetEdgeTolerance(
  157.     TQ3PickObject        pick,
  158.     float                *edgeTolerance);
  159.     
  160. QD3D_EXPORT TQ3Status Q3Pick_SetVertexTolerance(
  161.     TQ3PickObject        pick,
  162.     float                vertexTolerance);
  163.     
  164. QD3D_EXPORT TQ3Status Q3Pick_SetEdgeTolerance(
  165.     TQ3PickObject        pick,
  166.     float                edgeTolerance);
  167.  
  168. QD3D_EXPORT TQ3Status Q3Pick_GetNumHits(
  169.     TQ3PickObject        pick,
  170.     unsigned long        *numHits);
  171.  
  172. QD3D_EXPORT TQ3Status Q3Pick_EmptyHitList(
  173.     TQ3PickObject        pick);
  174.  
  175. QD3D_EXPORT TQ3Status Q3Pick_GetPickDetailData(
  176.     TQ3PickObject        pick,
  177.     unsigned long        index,
  178.     TQ3PickDetail        pickDetailValue,
  179.     void                *detailData);
  180.  
  181. TQ3Status Q3HitPath_EmptyData(
  182.     TQ3HitPath            *hitPath);
  183.  
  184. /* OBSOLETE */
  185. QD3D_EXPORT TQ3Status Q3Pick_GetHitData(
  186.     TQ3PickObject        pick,
  187.     unsigned long        index,
  188.     TQ3HitData            *hitData);
  189.  
  190. /* OBSOLETE */
  191. QD3D_EXPORT TQ3Status Q3Hit_EmptyData(
  192.     TQ3HitData            *hitData);
  193.  
  194.     
  195. /******************************************************************************
  196.  **                                                                             **
  197.  **                            Window point pick methods                         **
  198.  **                                                                             **
  199.  *****************************************************************************/
  200.  
  201. QD3D_EXPORT TQ3PickObject Q3WindowPointPick_New(
  202.     const TQ3WindowPointPickData    *data);
  203.  
  204. QD3D_EXPORT TQ3Status Q3WindowPointPick_GetPoint(
  205.     TQ3PickObject                    pick,
  206.     TQ3Point2D                        *point);
  207.  
  208. QD3D_EXPORT TQ3Status Q3WindowPointPick_SetPoint(
  209.     TQ3PickObject                    pick,
  210.     const TQ3Point2D                *point);
  211.  
  212. QD3D_EXPORT TQ3Status Q3WindowPointPick_GetData(
  213.     TQ3PickObject                    pick,
  214.     TQ3WindowPointPickData            *data);
  215.  
  216. QD3D_EXPORT TQ3Status Q3WindowPointPick_SetData(
  217.     TQ3PickObject                    pick,
  218.     const TQ3WindowPointPickData    *data);
  219.  
  220.  
  221. /******************************************************************************
  222.  **                                                                             **
  223.  **                            Window rect pick methods                         **
  224.  **                                                                             **
  225.  *****************************************************************************/
  226.  
  227. QD3D_EXPORT TQ3PickObject Q3WindowRectPick_New(
  228.     const TQ3WindowRectPickData    *data);
  229.  
  230. QD3D_EXPORT TQ3Status Q3WindowRectPick_GetRect(
  231.     TQ3PickObject                pick,
  232.     TQ3Area                        *rect);
  233.  
  234. QD3D_EXPORT TQ3Status Q3WindowRectPick_SetRect(
  235.     TQ3PickObject                pick,
  236.     const TQ3Area                *rect);
  237.  
  238. QD3D_EXPORT TQ3Status Q3WindowRectPick_GetData(
  239.     TQ3PickObject                pick,
  240.     TQ3WindowRectPickData        *data);
  241.  
  242. QD3D_EXPORT TQ3Status Q3WindowRectPick_SetData(
  243.     TQ3PickObject                pick,
  244.     const TQ3WindowRectPickData    *data);
  245.  
  246.  
  247. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  248.  
  249. /******************************************************************************
  250.  **                                                                             **
  251.  **                    Data structures to set up the pick object                 **
  252.  **                                                                             **
  253.  *****************************************************************************/
  254.  
  255. typedef struct TQ3BoxPickData {
  256.     TQ3PickData            data;
  257.     TQ3BoundingBox        box;
  258. } TQ3BoxPickData;
  259.  
  260. typedef struct TQ3RayPickData {
  261.     TQ3PickData            data;
  262.     TQ3Ray3D            ray;
  263.     float                vertexTolerance;
  264.     float                edgeTolerance;
  265. } TQ3RayPickData;
  266.  
  267. typedef struct TQ3SpherePickData {
  268.     TQ3PickData            data;
  269.     TQ3BoundingSphere    sphere;
  270.     float                vertexTolerance;
  271.     float                edgeTolerance;
  272. } TQ3SpherePickData;
  273.  
  274.  
  275. /******************************************************************************
  276.  **                                                                             **
  277.  **                        World-space box pick methods                         **
  278.  **                                                                             **
  279.  *****************************************************************************/
  280.     
  281. QD3D_EXPORT TQ3PickObject Q3BoxPick_New(
  282.     const TQ3BoxPickData    *data);
  283.  
  284. QD3D_EXPORT TQ3Status Q3BoxPick_GetBox(
  285.     TQ3PickObject            pick,
  286.     TQ3BoundingBox            *box);
  287.  
  288. QD3D_EXPORT TQ3Status Q3BoxPick_SetBox(
  289.     TQ3PickObject            pick,
  290.     const TQ3BoundingBox    *box);
  291.  
  292. QD3D_EXPORT TQ3Status Q3BoxPick_GetData(
  293.     TQ3PickObject            pick,
  294.     TQ3BoxPickData            *data);
  295.  
  296. QD3D_EXPORT TQ3Status Q3BoxPick_SetData(
  297.     TQ3PickObject            pick,
  298.     const TQ3BoxPickData    *data);
  299.     
  300.     
  301. /******************************************************************************
  302.  **                                                                             **
  303.  **                        World-space ray pick methods                         **
  304.  **                                                                             **
  305.  *****************************************************************************/
  306.  
  307. QD3D_EXPORT TQ3PickObject Q3RayPick_New(
  308.     const TQ3RayPickData    *data);
  309.  
  310. QD3D_EXPORT TQ3Status Q3RayPick_GetRay(
  311.     TQ3PickObject            pick,
  312.     TQ3Ray3D                *ray);
  313.  
  314. QD3D_EXPORT TQ3Status Q3RayPick_SetRay(
  315.     TQ3PickObject            pick,
  316.     const TQ3Ray3D            *ray);
  317.  
  318. QD3D_EXPORT TQ3Status Q3RayPick_GetData(
  319.     TQ3PickObject            pick,
  320.     TQ3RayPickData            *data);
  321.  
  322. QD3D_EXPORT TQ3Status Q3RayPick_SetData(
  323.     TQ3PickObject            pick,
  324.     const TQ3RayPickData    *data);
  325.  
  326.  
  327. /******************************************************************************
  328.  **                                                                             **
  329.  **                        World-space sphere pick methods                         **
  330.  **                                                                             **
  331.  *****************************************************************************/
  332.  
  333. QD3D_EXPORT TQ3PickObject Q3SpherePick_New(
  334.     const TQ3SpherePickData        *data);
  335.  
  336. QD3D_EXPORT TQ3Status Q3SpherePick_GetSphere(
  337.     TQ3PickObject                pick,
  338.     TQ3BoundingSphere            *sphere);
  339.  
  340. QD3D_EXPORT TQ3Status Q3SpherePick_SetSphere(
  341.     TQ3PickObject                pick,
  342.     const TQ3BoundingSphere        *sphere);
  343.  
  344. QD3D_EXPORT TQ3Status Q3SpherePick_GetData(
  345.     TQ3PickObject                pick,
  346.     TQ3SpherePickData            *data);
  347.  
  348. QD3D_EXPORT TQ3Status Q3SpherePick_SetData(
  349.     TQ3PickObject                pick,
  350.     const TQ3SpherePickData        *data);
  351.  
  352. #endif    /* ESCHER_VER_15 */
  353.  
  354.  
  355. /******************************************************************************
  356.  **                                                                             **
  357.  **                                Shape Part methods                             **
  358.  **                                                                             **
  359.  *****************************************************************************/
  360.  
  361. QD3D_EXPORT TQ3ObjectType Q3ShapePart_GetType(
  362.     TQ3ShapePartObject            shapePartObject);
  363.  
  364. QD3D_EXPORT TQ3ObjectType Q3MeshPart_GetType(
  365.     TQ3MeshPartObject            meshPartObject);
  366.  
  367. QD3D_EXPORT TQ3Status Q3ShapePart_GetShape(
  368.     TQ3ShapePartObject            shapePartObject,
  369.     TQ3ShapeObject                *shapeObject);
  370.  
  371. QD3D_EXPORT TQ3Status Q3MeshPart_GetComponent(
  372.     TQ3MeshPartObject            meshPartObject,
  373.     TQ3MeshComponent            *component);
  374.  
  375. QD3D_EXPORT TQ3Status Q3MeshFacePart_GetFace(
  376.     TQ3MeshFacePartObject        meshFacePartObject,
  377.     TQ3MeshFace                    *face);
  378.  
  379. QD3D_EXPORT TQ3Status Q3MeshEdgePart_GetEdge(
  380.     TQ3MeshEdgePartObject        meshEdgePartObject,
  381.     TQ3MeshEdge                    *edge);
  382.  
  383. QD3D_EXPORT TQ3Status Q3MeshVertexPart_GetVertex(
  384.     TQ3MeshVertexPartObject        meshVertexPartObject,
  385.     TQ3MeshVertex                *vertex);
  386.  
  387. #ifdef __cplusplus
  388. }
  389. #endif  /*  __cplusplus  */
  390.  
  391. #if defined(__MWERKS__)
  392.     #pragma enumsalwaysint reset
  393. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  394.     #pragma options enum=reset
  395. #endif
  396.  
  397. #endif  /*  QD3DPick_h  */
  398.